package com.lzh.runke.core.mapper;


import com.lzh.runke.core.entity.BaseEntity;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * BaseMapper
 *
 * @param <Entity>
 * @param <Spec>
 * @author xie
 */
public interface BaseMapper<Entity extends BaseEntity, Spec> {

    /**
     * 插入记录
     *
     * @param entity
     * @return
     */
    int insert(Entity entity);

    /**
     * 批量插入
     *
     * @param entities
     * @return
     */
    int insertBatch(@Param("entities") Collection<Entity> entities);

    /**
     * 根据entity.id更新记录，（entity.id 必须传入）
     *
     * @param entity
     * @return
     */
    int update(Entity entity);

    /**
     * 根据其他条件
     *
     * @param entity
     * @param spec
     * @return
     */
    int updateBySpec(@Param("entity") Entity entity, @Param("spec") Spec spec);

    /**
     * 根据主键删除记录
     *
     * @param entity
     * @return
     */
    int delete(Entity entity);

    /**
     * 根据条件删除记录
     *
     * @param spec
     * @return
     */
    int deleteBySpec(Spec spec);

    /**
     * 根据ID查询记录
     *
     * @param id
     * @return
     */
    Entity findById(String id);

    /**
     * 查询所有记录
     *
     * @return
     */
    List<Entity> findAll();

    /**
     * 根据条件查询记录
     *
     * @param spec
     * @return
     */
    List<Entity> findBySpec(Spec spec);

    /**
     * 根据条件查询记录
     *
     * @param spec
     * @return
     */
    List<Entity> findBySpecForPage(Spec spec);

    /**
     * 查询id 集合
     *
     * @param spec
     * @return
     */
    List<String> findIdsBySpecPage(Spec spec);

    /**
     * 按条件查询数据总数
     *
     * @param spec
     * @return
     */
    Integer countTotal(Spec spec);
}
